package com.air.thread;

import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

/**
 * @author shent
 */
public class SemaphoreDemo {
    //参数:许可证 – 可用许可证的初始数量。 此值可能为负数，在这种情况下，必须在授予任何获取之前进行释放。
    static Semaphore semaphore = new Semaphore(5);

    public static void main(String[] args) throws InterruptedException {
        //获取公共资源
        semaphore.acquire(2);
        //释放公共资源
        semaphore.release(2);

        //只等待500毫秒
        if(semaphore.tryAcquire(500, TimeUnit.MILLISECONDS)){
            System.out.println(Thread.currentThread().getName()+"时间:"+System.currentTimeMillis());
            Thread.sleep(500);
            semaphore.release();
        }else {
            //熔断限流降级 hystrix 就是相似的实现
            System.out.println("降级");
        }
    }
}
